<?php
class Admin_UserController extends Zend_Controller_Action{
	private $_model;
	public function init(){

		$this->_model = new Application_Model_DbTable_User();

	}
	public function loginAction(){
		$this->_helper->layout()->setLayout('login');
		$auth = Zend_Auth::getInstance();
		
		//nếu đã login rồi thì chuyển vào trang trang index
		if($auth->hasIdentity()){
			$this->_helper->redirector('index','index','admin');
		}
		
		//nếu bắt đầu đăng nhập
		if($this->_request->isPost()){
			
			//lấy giá trị username và password
			$username = $this->_request->getParam('username');
			$password = $this->_request->getParam('password');
			
			//thiết lập adapter với table, column để kiểm tra
			$adapter = new Zend_Auth_Adapter_DbTable();
			$adapter->setTableName('tbl_user');
			$adapter->setIdentityColumn('user_email');
			$adapter->setCredentialColumn('user_password');
			$adapter->setCredentialTreatment('MD5(?) and user_status = 1');
			
			//gán giá trị
			$adapter->setIdentity($username);
			$adapter->setCredential($password);
			
			
			$result = $auth->authenticate($adapter);
			
			switch ($result->getCode()){
				
				case Zend_Auth_Result::FAILURE_IDENTITY_AMBIGUOUS:
					$this->_helper->flashMessenger("Tên đăng nhập không tồn tại");
					break;
				case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:
					$this->_helper->flashMessenger("Tên đăng nhập không tồn tại");
					break;
				case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
					$this->_helper->flashMessenger('Mật khẩu không đúng');
					break;
				case Zend_Auth_Result::SUCCESS:
					$rowObject = $adapter->getResultRowObject();
					$auth->getStorage()->write($rowObject);
					$row = $this->_model->fetchRow($this->_model->select()->where('user_id = ?',$rowObject->user_id));
					$row->user_last_access = date('Y-m-d H:i:s');
					$row->save();
					$this->_helper->redirector('index','index','admin');
					break;
				default:
					$this->_helper->flashMessenger("Đăng nhập thất bại!");
					break;
			}
			$this->_helper->redirector('login','user','admin');
		}
	}

	public function logoutAction(){
		$auth = Zend_Auth::getInstance ();
		if ($auth->hasIdentity ()) {
			$auth->clearIdentity ();
			$this->_redirect ( "/admin/" );
		}
	}
	
	public function indexAction(){

		$filters = array();

		//từ khóa
		$keyword = $this->_request->getParam('keyword','');
		$filters['keyword']=$keyword;
		$this->view->keyword = $keyword;

		//hang san xuat
		$group = $this->_request->getParam('group',0);
		$filters['group']=$group;
		$this->view->group = $group;

		// từ ngày
		$fromDate = $this->_request->getParam('fromDate',null);
		//$filters['fromDate']=Cms_String_String::getIntFromDate($fromDate);
		$filters['fromDate']=Cms_String_String::getDateFromString($fromDate);
		$this->view->fromDate = $fromDate;

		// đến ngày
		$toDate = $this->_request->getParam('toDate',null);
		$filters['toDate']=Cms_String_String::getDateFromString($toDate,'last');//chuyển về định dạng của mysql
		$this->view->toDate = $toDate;

		// trạng thái | status
		$status = $this->_request->getParam('searchStatus',"");
		$filters['status']=$status;
		$this->view->status=$status;

		// sắp xếp | order
		$order = $this->_request->getParam('order',"");
		if($order!=""){
			list($orderBy,$orderType) = explode('-', $order);
		}else{
			$orderBy=null;
			$orderType=null;
		}


		//get item count per page
		$icpp = $this->_request->getParam('icpp',20);

		//get current page number
		$currentPage = $this->_request->getParam('page',1);

		$list = $this->_model->getList($filters,$orderType,$orderBy);
		
		// pagination
		$paginator = Zend_Paginator::factory($list);
		$paginator->setCurrentPageNumber($currentPage);
		$paginator->setItemCountPerPage($icpp);
		$paginator->setPageRange(5);

		//assign to view
		$this->view->paginator=$paginator;
		//$this->_helper->viewRenderer->setNoRender(true);

	}
	
	public function insertAction(){
		$form = new Admin_Form_InsertUser();
		$form->removeElement('user_creation_time');
		$form->removeElement('user_last_access');
		$form->removeElement('user_id');
		$form->getDisplayGroup('basic-info')->removeElement('user_creation_time');
		$form->getDisplayGroup('basic-info')->removeElement('user_last_access');
		$form->getDisplayGroup('basic-info')->removeElement('user_creation_time');
		$errors = array();
		if($this->_request->isPost()){
			
			if($form->isValid($this->_request->getPost())){	
				$status = true;
				//lấy dữ liệu đã gửi lên
				$params = $form->getValues();
				if($params['user_password']!=$params['user_password_retype']){
					$errors[]="Mật khẩu nhập lại không đúng";
					$form->getElement('user_password_retype')->addError('Mật khẩu nhập lại không đúng');
					$form->markAsError();
					$status  = false;
				}
				
				$un = $this->_model->fetchRow($this->_model->select()->where("user_username = ?",$params['user_username']));
				if ($un){
					$errors[]="Tên đăng nhập đã tồn tại";
					$form->getElement('user_username')->addError('Tài khoản này đã tồn tại');
					$form->markAsError();
					$status = false;
				}	

				if($status){
					$row = $this->_model->createRow($this->_request->getPost());	
					$row->user_password = md5($params['user_password']);			
					$row->user_creation_time = date('Y-m-d H:i:s');	
								
					// save to database
					$row->save();
					$this->_helper->flashMessenger('Thêm Tài khoản thành công!');
					$this->_helper->redirector('index','user','admin');
				}
			}
		}
		$this->view->errors = $errors;
		$this->view->form = $form;
	}
	
	public function updateAction(){
		$form = new Admin_Form_InsertUser();
		$form->removeElement('user_password');
		$form->removeElement('user_password_retype');
		$form->removeElement('user_creation_time');
		$form->removeElement('user_last_access');
		$form->removeElement('user_created_by');
		$form->getDisplayGroup('basic-info')->removeElement('user_password');
		$form->getDisplayGroup('basic-info')->removeElement('user_password_retype');
		$form->getDisplayGroup('basic-info')->removeElement('user_creation_time');
		$form->getDisplayGroup('basic-info')->removeElement('user_last_access');
		$form->getDisplayGroup('basic-info')->removeElement('user_created_by');
		$errors = array();
		$id = $this->_request->getParam('id');
		$row = $this->_model->fetchRow($this->_model->select()->where('user_id = ?',$id));
		if($this->_request->isPost()){
				
			if($form->isValid($this->_request->getPost())){
				$status = true;
				//lấy dữ liệu đã gửi lên
				$params = $form->getValues();
				if($params['user_password']!=$params['user_password_retype']){
					$errors[]="Mật khẩu nhập lại không đúng";
					$form->getElement('user_password_retype')->addError('Mật khẩu nhập lại không đúng');
					$form->markAsError();
					$status  = false;
				}

				if($status){
					unset($params['user_creation_time']);
					$row->setFromArray($params);		
								
					// save to database
					try {
						$row->save();
						$this->_helper->flashMessenger('cập nhật tài khoản thành công!');
						$this->_helper->redirector('index','user','admin');
					} catch (Exception $e) {
						$this->_helper->flashMessenger("cập nhật tài khoản thất bại ". $e->getMessage());
						$this->_helper->redirector('index','user','admin');
					}
					
				}
			}
		}
		$form->populate($row->toArray());
		$this->view->errors = $errors;
		$this->view->form = $form;
	}
	
	
	
	public function deleteAction(){
		$status = 0;
		$id = @(array)$this->_request->getParam('id');	
		$rows = $this->_model->fetchAll($this->_model->select()->where('user_id IN (?)',$id));
		if(count($rows)>0){
			foreach($rows as $row){		
				if($row->user_group_user_id == Application_Model_DbTable_GroupUser::GROUP_USER_SUPPERADMIN)	
				{
					$this->_helper->flashMessenger('Không thể xóa người dùng có quyền SUPPER_ADMIN!');
					break;
				}else{
					$row->delete();
					$status = 1;
					$this->_helper->flashMessenger('Xóa dữ liệu thành công!');
				}
				
			}
			
			$this->_helper->redirector('index','user','admin');
		}
	}
	
	public function changestatusAction(){
		$status ="";
		$id = $this->_request->getParam('id');
	
		$row = $this->_model->fetchRow($this->_model->select()->where('user_id = ?',$id));
	
		if(!$row){
			$status['error']="user không tồn tại";
		}else{
			
			
			$row->user_status =(int)(1 - $row->user_status);
			$status['status']=$row->user_status;
			try {
				$row->save();
			} catch (Exception $e) {
				$status['errors']="lỗi {$e->getMessage()}";
			}
				
		}
		$this->_helper->viewRenderer->setNoRender(true);
		$this->_helper->layout()->disableLayout();
		$this->_helper->json->sendJson($status);
	}
}



